
package algo3c3g3.model.action;

import algo3c3g3.model.*;
import org.jdom.Element;

import algo3c3g3.model.persistence.Persistable;

/**
 * Clase base para las posibles acciones que puede realizar una unidad.
 */
public abstract class Action implements Persistable
{
    public Action() {}
    
    public Action(Element e)
    {
        this.load(e);
    }

    /**
     * @param unit Unidad sobre la que se ejecuta la accion
     */
    public abstract void perform(Unit unit);
    
    /**
     * Acciones que se ejecutan cuando una unidad cambia de accion.
     */
    public void dispose(Unit unit) {}
    
    
    @Override
    public boolean equals(Object o)
    {
        Action action = (Action) o;

        return (this.getClass() == action.getClass());
    }

    public Element save()
    {
        return new Element(this.getClass().getCanonicalName());
    }

    public void load(Element e) {}
}
